查看原文
其他

AUTOSAR CryptoStack--CSM Job夹带了哪些私货

快乐的肌肉 汽车MCU软件设计 2024-03-08

目录

1.认识CSM特性

1.1 密码服务

1.2 队列

2.Job夹带了哪些私货

3.小结


之前,有一篇文章详细描述了CSM模块里几个关键类型,例如JobType、ConfigType。

但是CSM Job到底关联了哪些东西?用户调用CSM服务接口,Crypto Stack是如何传递到HSM中?我们今天再次来仔细看看。

1.认识CSM特性

在AUTOSAR CSM文档7.2.2.2章节详细描述了密码服务的使用方法和服务出现资源竞争的处理方法。

1.1 密码服务

根据HSM内部本身特性,我们在分块处理数据时,需要对硬件加密引擎发送START\UPDATE\FINISH指令来完成数据的处理。因此在AUTOSAR规范里,它把这些指令叫做运行模式,如下:同时,状态机定义如下:需要注意的是,根据加密算法的特性,在AUTOSAR中只有如下服务会使用上述模式
HASH,MACGENERATE,MACVERIFY,ENCRYPT,DECRYPT,AEAD_ENCRYPT,,AEAD_DECRYPT,SIGNATUREGENERATE,SIGNATUREVERIFY
那么从软件实现角度,可以得到如下代码
/*#10 Confirm job state and operation mode */Hsm_DispatchService(objectId, job, CRYPTO_OPERATIONMODE_START);/*#20 Confirm job state and operation mode */Hsm_DispatchService(objectId, job, CRYPTO_OPERATIONMODE_UPDATE);/*#30 Confirm job state and operation mode */Hsm_DispatchService(objectId, job, CRYPTO_OPERATIONMODE_FINISH);针对其他密码服务,比如说SAVE_CONTEXT,mode选用SINGLE_CALL。

1.2 队列

 在CSM中提出了队列的概念,用于仲裁多个请求同时使用一个加密驱动,它根据每个请求(jobRequest)优先级进行排队。每个jobRequest排好队之后,就应该通过CryIf扔到对应的CryptoDriverObject,那么这条路径也有一个名称叫做channel;所以一个queue对应一个channel,这channel对应一个特定的DriverObject。如下图:需要注意的是,CSM Queue的大小是可以配置的,例如OEM规范中要求SecOC校验的报文有15个,那么AES_CMAC_VERIFY驱动对应的CSM Queue大小就配置15个,从软件实现角度来看,如果用index的方式来表示每个报文的JobRequest,那么该CSM Queue就应该是15 bytes。既然Queue有大小限制,那么肯定就存在队列已经满了,用户还在发送请求的情况,因此在软件设计时我们需要考虑这些情况的处理。

2.Job夹带了哪些私货

既然用户端均使用CSM jobRequest来完成各种密码服务,那这个job应该携带了丰富的信息以支撑不同加密算法的要求。首先,job肯定包含了服务类型(对称、非对称、摘要)、使用哪种算法(AES128\SHA3_256等等)、job优先级,还会有对应密码服务所需要的密钥索引。所以根据AUTOSAR CSM规范,我们定义了job的结构体类型如下:
/* [SWS_Csm_01013] Crypto_JobType */typedef struct { uint32 jobId; Crypto_JobStateType jobState; Crypto_JobPrimitiveInputOutputType jobPrimitiveInputOutput; const Crypto_JobPrimitiveInfoType* jobPrimitiveInfo; Crypto_JobRedirectionInfoType* jobRedirectionInfoRef; uint32 cryptoKeyId; uint32 targetCtyptoKeyId; const uint32 jobPriority;}Crypto_JobType;

其中,

  • jobPrinmitiveInfo用于保存上述提到的加密原语相关信息和密钥索引;

  • jobPrinmitiveInputOut很明显就是用来保存输入数据和HSM返回的数据,例如如果是MAC_VERIFY,就是原始数据+MAC值存入inputPtr,outPtr保存HSM返回的mac值等等。

 根据上面描述,针对Job的理解就有如下示意图:

  1. CSM根据Job优先级放入Queue里面,通过CryIf给到CryptoDriver;

  2. CryptoDriver识别Job中的原语信息,找到对应的密码算法并分配给HSM内部的密码算法模块,例如Job_a是使用AES128对数据进行解密,此时在CryptoDriver层会根据预定义的IPC通信协议将数据序列化传给HSM;

  3. HSM获取数据后,通过Job中关联的keyId去密钥槽获取解密密钥Key_a,然后对Job携带的密文进行解密,完成后通知CryptoDriver取走明文。


3.小结

本文主要是对Host端的CSM的Job包含的信息进行了解析,因为在整个加密栈里,job是非常关键的一点,当然我们这里是讲了密码服务,涉及到密钥管理方面,我们知道它是有其他API的,这个我们后面单独再谈。通过本文,我们在配置工程的时候就要有这个思路,首先明确HSM提供了哪些密钥索引和密码算法,释放了哪些密码处理对象(CryptoDriverObject),这可以通过arxml交互;其次在Host侧,我们需要根据需求来配置CSM的job对应的queue大小、原语、密钥索引序号,这里必须和HSM所提供的一一对应。最后,根据需求配置每个job所需要的input和output的大小。 



往期回顾:

1.汽车标定精选

万字长文:汽车标定技术--XCP概述
汽车标定技术--A2L格式分析
汽车标定技术--标定概念详解
汽车标定技术--A2L文件生成的方法
汽车标定技术--标定量与#pragma的趣事
汽车ECU标定的实现方式
英飞凌TC3xx-Overlay机制

2.AUTOSAR精选

AUTOSAR OS概述(一)
AUTOSAR OS概述(二)
AUTOSAR 诊断栈分析(一)
AUTOSAR 诊断栈分析(二):DEM
AUTOSAR诊断栈分析(三):DTC状态位

3.汽车网络安全精选

汽车网络安全渗透测试概述
汽车网络安全方案需求分析
汽车信息安全--常见车规MCU安全启动方案
车载信息安全场景概述
汽车网络安全--关于UN R155认证的思考
汽车网络安全--ISO\SAE 21434解读

4.汽车功能安全精选


5.汽车虚拟化精选

    汽车ECU虚拟化技术初探(一)

    汽车ECU虚拟化技术(二)--U2A虚拟化功能

6.杂七杂八

    我为什么开始写技术博客

    Flash模拟EEPROM原理浅析

    征途漫漫:汽车MCU的国产替代往事


继续滑动看下一个

AUTOSAR CryptoStack--CSM Job夹带了哪些私货

快乐的肌肉 汽车MCU软件设计
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存